# import numpy as np
#
# x = [1,2,3,4,5,6,7,8,9,10]
# y= [10,20,30,40,50,60,70,80,90]
# print(np.argsort(x))
# y1 = y[x]
# print(y1)

# a=(1,3)
# b=(4,)
# print(a+b)
import numpy as np

# a = np.array([[1,2,3],["", 2, 4] ,[4,"",8],["","",""]])
# b = np.where(a == "")
# b0 = np.array(b)
# print(a)
# print(b)
# print(b0)
# RT = [[""] * 5 for i in range(8)]
# RT1 = np.array(RT)
# print(RT)
# # print(RT1)
# b1 = np.where(RT1 == "")
# print(b1)

# arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# cond1 = arr > 3
# indices = np.where(cond1 )
# print(indices)  # 输出：(array([1, 1, 2]), array([0, 1, 2]))

# # 假设你有一个列表
# numbers = [1, 3, 2, 0, 4]
#
# # 使用列表推导式和any()函数来判断是否有大于2的数
# while any(num > 2 for num in numbers):
#     print("列表中有大于2的数")
#
# print("列表中没有大于2的数")

# 创建一个3x4x2的三维矩阵
# three_d_matrix = np.zeros((3, 4, 2))
# print(three_d_matrix)
#
# print(np.mean([[16], [35], [22]]) - np.mean(np.ones([3,1])))
# print(2 ** 10)

# # 假设 arr 是一个三维数组
# arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
#
# # 假设你想找到所有值为 5 的元素的索引
# value = 5
#
# # 使用 np.where()
# indices = np.where(arr == value)[1]
#
# print(indices)

# print([[0] * 7] * 18)

# # 假设你有一个三维矩阵，每个元素都是一个包含三个值的元组
# matrix = np.array([[('1',2,3),('2',3,4)],[('3',2,3),('4',3,4)],[('5',2,3),('6',3,4)],[('7',2,3),('8',3,4)]],object)
# target_value = '2'
#
# # 使用 numpy.where 查找包含值为 22 的元组的索引
# indices = np.where(np.array(matrix) == target_value)
# print(matrix)
# # indices 是一个元组，包含了每个维度上符合条件的索引数组
# # 分别对应于三维矩阵中元素的坐标
# print("索引坐标：", np.array(indices))

# 原始的嵌套列表
# nested_list = [[[('1', 2, 3), '', ('4', 5, 6)]]]
#
# # 将嵌套列表转换为 NumPy 数组
# array = np.array(nested_list)
#
# # 输出 NumPy 数组
# print("NumPy 数组:")
# print(array)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

# 创建一个新的3D图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 设置坐标轴的范围

ax.grid(False)

# 添加坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 定义一些点的坐标
points = [(1, 1, 1), (2, 3, 2), (3, 2, 1), (5, 5, 5), (6, 4, 1)]

# 将点的坐标转换为numpy数组，以便matplotlib可以处理它们
points_np = np.array(points)

# 使用scatter方法绘制点
ax.scatter(points_np[:, 0], points_np[:, 1], points_np[:, 2], c='red', marker='o')

# 绘制每个点与坐标轴组成的长方体框架，每个长方体有不同颜色
colors = plt.cm.viridis(np.linspace(0, 1, len(points)))  # 使用viridis颜色映射来生成颜色

# 绘制每个点与坐标轴组成的长方体框架
for i,point in enumerate(points_np):
    # # X轴线段
    # ax.plot([0, point[0]], [0, 0], [0, 0], 'b-')
    # # Y轴线段
    # ax.plot([0, 0], [0, point[1]], [0, 0], 'g-')
    # # Z轴线段
    # ax.plot([0, 0], [0, 0], [0, point[2]], 'r-')

    # X-Y 平面上的矩形
    xy_rect = [[0, 0, 0], [point[0], 0, 0], [point[0], point[1], 0], [0, point[1], 0], [0, 0, 0]]
    xy_collection = Poly3DCollection([xy_rect])
    # xy_collection.set_facecolor((0.5, 0.5, 0.5, 0.2))  # 灰色半透明
    xy_collection.set_facecolor((colors[i, 0], colors[i, 1], colors[i, 2], 0.2))  # 使用不同颜色，半透明
    ax.add_collection3d(xy_collection)

    # X-Z 平面上的矩形
    xz_rect = [[0, 0, 0], [point[0], 0, 0], [point[0], 0, point[2]], [0, 0, point[2]], [0, 0, 0]]
    xz_collection = Poly3DCollection([xz_rect])
    # xz_collection.set_facecolor((0.5, 0.5, 0.5, 0.2))  # 灰色半透明
    xy_collection.set_facecolor((colors[i, 0], colors[i, 1], colors[i, 2], 0.2))  # 使用不同颜色，半透明
    ax.add_collection3d(xz_collection)

    # Y-Z 平面上的矩形
    yz_rect = [[0, 0, 0], [0, point[1], 0], [0, point[1], point[2]], [0, 0, point[2]], [0, 0, 0]]
    yz_collection = Poly3DCollection([yz_rect])
    # yz_collection.set_facecolor((0.5, 0.5, 0.5, 0.2))  # 灰色半透明
    xy_collection.set_facecolor((colors[i, 0], colors[i, 1], colors[i, 2], 0.2))  # 使用不同颜色，半透明
    ax.add_collection3d(yz_collection)

ax.view_init(elev=10, azim=30)

# 显示图形
plt.show()
